﻿//范围运算符.. ^
//文档定义：..运算符指定某一索引范围的开头和末尾作为其操作数。左侧操作数是范围的包含性开头。右侧操作数是范围的不好含性末尾。任一操作数都可以是序列开头或末尾的索引
//https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/member-access-operators#range-operator-
//下表显示了表达集合范围的各种方法：

//范围运算符表达式 说明
//..  集合中的所有值。
//..end 从开头到 end（不含）的值。
//start..  从 start（含）到结尾的值。
//start..end   从 start（含）到 end（不含）的值。
//^start..  从 start（含）到倒计数结尾的值。
//..^end   从开头到 end（不含，倒计数）的值。
//start..^end   从 start（含）到 end（不含，倒计数）的值。
//^start..^end   从 start（含）到 end（不含），均为倒计数。

int[] oneThroughTen = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

Write(oneThroughTen, ..);
Write(oneThroughTen, ..3);
Write(oneThroughTen, 2..);
Write(oneThroughTen, 3..5);
Write(oneThroughTen, ^2..);
Write(oneThroughTen, ..^3);
Write(oneThroughTen, 3..^4);
Write(oneThroughTen, ^4..^2);

static void Write(int[] values, Range range) => Console.WriteLine($"{range}:\t{string.Join(",", values[range])}");